package com.hr.common.utils;



import com.hr.system.entity.SysMenu;
import com.hr.system.entity.vo.MenuTree;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class MenuUtil {

    /**
     * 转换为菜单树
     * @param menus 菜单集合*/
    public static List<MenuTree> getMenuTree(List<SysMenu> menus){
        //1.准备菜单树 结果 集合
        List<MenuTree> menuTrees=new ArrayList<>();
        //2.基于函数式编程 实现数据的组装处理
        if(menus!=null && menus.size()>0){
            //遍历集合 转换为 Menu-->MenuTree
            List<MenuTree> trees=menus.stream().map(m-> EntityConvertUtil.convert(m,MenuTree.class)).collect(Collectors.toList());

            //获取对应的 子菜单
            trees.forEach(t->{
                //寻找子菜单
                List<MenuTree> children=getChildrenMenu(t.getId(),trees);
                //将子菜单添加到当前菜单上
                t.setChildren(children);
            });

            //一级菜单 不需要找上级 filter:过滤条件处理 collect:结果处理 集合
            menuTrees.addAll(trees.stream().filter(t->t.getLevel()==1).collect(Collectors.toList()));
        }
        return menuTrees;
    }
    /**
     * 获取指定菜单的子菜单
     * @param id 菜单id
     * @param treeList 菜单集合*/
    private static List<MenuTree> getChildrenMenu(Integer id,List<MenuTree> treeList){
        return treeList.stream().filter(t->t.getParentId()==id).collect(Collectors.toList());
    }
}
